{
  /*
    学习目标：
    作用：基于旧的结构，创建新的结构
    场景：将旧的结构，重新定义为新的结构
    语法：
       [keyName in keyof 类型]: 新的类型
    注意：💥映射类型，只能用在type中，不能用在interface中
   
  */

  type Person = {
    name: string;
    age: number;
    gender: string;
  };
  const zs = {
    name: 'zs',
    age: 18,
    gender: 'nane',
  };

  type MyPerson = {
    //  映射，指从旧结构的键名中，重新得到新的键与类型
    [key in keyof Person]: number;
  };
  //   const res: MyPerson = {
  //     name: '123',
  //     age: 11,
  //     gender: 122,
  //   };

  type ReadonlyNew<T> = {
    readonly // 🔔 T[key] 表示从T中取出key对应的原本的类型
    [key in keyof T]: T[key];
  };

  const newPerson: ReadonlyNew<{ name: number }> = {
    name: 123,
  };
  newPerson.name = 456;

  // const newZs: MyPerson = {
  //   name: 123,
  //   age: 123,
  //   gender: '123',
  // };
}
